#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
    // C接口
    printf("hello printf\n");
    fprintf(stdout, "hellp fprintf\n");
    const char *fputsString = "hello fputs\n";
    fputs(fputsString, stdout);


    // 系统接口
    const char *wstring = "hello write\n";
    write(1, wstring, strlen(wstring));

    //代码结束之前，进行创建子进程
    //1. 如果我们没有进行>,看到了4条消息
    //   stdout 默认使用的是行刷新，在进程fork之前，三条C函数已经将数据进行打印输出到显示器上(外设),你的FILE内部，进程内部不存在对应的数据啦
    //2. 如果我们进行了>, 写入文件不再是显示器，而是普通文件，采用的刷新策略是全缓冲，之前的3条c显示函数，虽然带了\n,但是不足以stdout缓冲区写满！数据并没有被刷新！！！
    //执行fork的时候，stdout属于父进程，创建子进程时， 紧接着就是进程退出！谁先退出，一定要进行缓冲区刷新(就是修改)
    //写时拷贝！！数据最终会显示两份
    //3. write为什么没有呢？上面的过程都和wirte无关，wirte没有FILE，而用的是fd，就没有C提供的缓冲区
    fork(); // fork

    return 0;
}
